home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 12 / CU Amiga Magazine's Super CD-ROM 12 (1997)(EMAP Images)(GB)[!][issue 1997-07].iso / CUCD / Games / DestructivePoker / sources / sources.lha / game.cpp < prev    next >
C/C++ Source or Header  |  1997-04-02  |  4KB  |  198 lines

  1. /*
  2.         game.cpp (pokeri peli olio - yhteinen Windowsille & AmigaOS:lle)
  3.  
  4.         V1.00 - 181196  Kimmo Teräväinen
  5.         -----   ------  ----------------
  6.         Look game.h
  7.  
  8. */
  9.  
  10. #include "game.h"
  11. #include "handprfs.h"
  12. #include "betprefs.h"
  13. #include "double.h"
  14. #include "savefile.h"
  15.  
  16. void ShowHandEvaluation(TWindow *,int);
  17.  
  18. const int Winnings[2][11] = {
  19. //  0 1 2  3  4  5  6  7  8  9  10
  20. //  - - - -- -- -- -- -- -- -- ---
  21.   { 0,0,5,10,20,30,40,80,140,160,320 },
  22.   { 0,0,5,10,20,30,40,80,180,160,320 }
  23. };
  24.  
  25. void cGamePoker::CreateCards()
  26. {
  27.   for(int i=0; i<CARDS_MAX_LKM ; i++) {
  28.     cards[i]=new cIMGCard(wnd,gfx,cPoint(0,0),cCard(i));
  29.   }
  30. }
  31.  
  32. void cGamePoker::DeleteCards()
  33. {
  34.   for(int i=0; i<CARDS_MAX_LKM ; i++) {
  35.     if(cards[i]) delete cards[i]; cards[i]=NULL;
  36.   }
  37. }
  38.  
  39. void cGamePoker::MenuOld()
  40. {
  41.   cSaveFile file(req.Load());
  42.   if(file.Load()==0) {
  43.     InitPiles();
  44.     dealpile.Shuffle();
  45.     money=file.Points();
  46.   }
  47. }
  48.  
  49. void cGamePoker::MenuSave()
  50. {
  51.   cSaveFile file(req.Save());
  52.   file.Points(money);
  53.   if(file.Save()==0) {
  54.     MenuNew();
  55.     money=0;
  56.   }
  57.   req.Clear();
  58. }
  59.  
  60. void cGamePoker::InitPiles()
  61. {
  62.   dealpile.Erase();     // Take cards away from piles
  63.   junkpile.Erase();     //
  64.   handpile.Erase();     //
  65.  
  66.   for(int i=0; i<52+jokers ; i++)   // and put them (cards) all
  67.     dealpile.Insert(cards[i]);      // to the deal pile
  68. }
  69.  
  70.  
  71. void cGamePoker::GadgetBet()
  72. {
  73.   MenuPrefsBet();
  74. }
  75.  
  76. void cGamePoker::GadgetShuffle()
  77. {
  78.   if(changed==-1) dealpile.Shuffle();
  79. }
  80.  
  81.  
  82. void cGamePoker::GadgetFinish()
  83. {
  84.   cIMGCard *card; int i=0;
  85.   if(changed==-1) {
  86.     if((int)money-jokers-changes<0) {
  87. #ifdef _Windows
  88.       wnd->MessageBox("Not enough money!","Poker Note");
  89. #else
  90.       EasyStruct myES = {
  91.         sizeof(struct EasyStruct),0,
  92.         (UBYTE*)"Poker Note",
  93.         (UBYTE*)"Not enough money!",
  94.         (UBYTE*)"OK"
  95.       };
  96.       EasyRequest(wnd, &myES, NULL, NULL);
  97. #endif
  98.       return;
  99.     }
  100.     money-=(jokers+changes);
  101.   }
  102.   changed++;                               // CHANGE:
  103.   junkpile.Insert(handpile);               // turned -> to junkpile
  104.   while(handpile.Can_Insert()) {           //
  105.     card=dealpile.Deal(); if(!card) break; // deal new cards to empty
  106.     handpile.Insert(card);                 // place in handpile
  107.     i++;
  108.   }
  109.  
  110.   if(i==0 || changed>=changes) {
  111.     int win=0;
  112.  
  113.     handpile.FreezeAll();       // Prevent turning of handcards
  114.  
  115.     if(handpile.GetPrefs_5ofkind()) win=1;    // Calculate WinPot
  116.     win=Winnings[win][handpile.Evaluate()];   //
  117.  
  118.     ShowHandEvaluation(wnd,handpile.Evaluate());   // Show Evaluation
  119.     if(win) TDoubleDialog(this,wnd,win).Execute(); // If Win Pot -> Double
  120.  
  121.     dealpile.Insert(junkpile);  // Take cards to dealpile
  122.     handpile.TurnAll();         // and shuffle
  123.     dealpile.Insert(handpile);  //
  124.     dealpile.Shuffle();         //
  125.     changed=-1;
  126.   }
  127. }
  128.  
  129. void cGamePoker::MenuNew()
  130. {
  131.   money=40;
  132.   InitPiles();
  133.   dealpile.Shuffle();
  134.   req.Clear();
  135. }
  136.  
  137. void cGamePoker::MenuAbout()
  138. {
  139. #ifdef _Windows
  140.   TDialog(wnd,DIALOG_ABOUT).Execute();
  141. #else
  142.   EasyStruct myES = {
  143.     sizeof(struct EasyStruct),0,
  144.     (UBYTE*)"About Destructive Poker",
  145.     (UBYTE*)"       2nd April 1997\n"\
  146.             ""\
  147.             " Destructive Poker V1.01\n"\
  148.             "            by\n"\
  149.             "   Kimmo Teräväinen\n"\
  150.             "\n"\
  151.             "e-mail: kihete@cc.jyu.fi\n"\
  152.             "\n"\
  153.             "snail-mail:\n"\
  154.             "Roninmäentie 6 L 28 B\n"\
  155.             "40500 JYVÄSKYLÄ\n"\
  156.             "FINLAND",
  157.     (UBYTE*)"OK"
  158.   };
  159.   EasyRequestArgs(wnd, &myES, NULL, NULL);
  160. #endif
  161. }
  162.  
  163.  
  164. void cGamePoker::MenuPrefsHand()
  165. {
  166.   dealpile.Insert(junkpile);
  167.   handpile.TurnAll();
  168.   dealpile.Insert(handpile);
  169.  
  170.   TPrefsHandDialog(&handpile,wnd).Execute();
  171.  
  172.   dealpile.Shuffle();
  173.   changed=-1;
  174. }
  175.  
  176.  
  177. void cGamePoker::MenuPrefsBet()
  178. {
  179.   dealpile.Insert(junkpile);
  180.   handpile.TurnAll();
  181.   dealpile.Insert(handpile);
  182.  
  183.   TPrefsBetDialog(this,wnd).Execute();
  184.  
  185.   InitPiles();
  186.   dealpile.Shuffle();
  187.   changed=-1;
  188. }
  189.  
  190. void cGamePoker::MenuHelp()
  191. {
  192. #ifdef _Windows
  193.   wnd->WinHelp("poker.hlp",HELP_INDEX, 0);
  194. #else
  195.   Execute((UBYTE*)"run >NIL: SYS:Utilities/MultiView poker.guide",NULL,NULL);
  196. #endif
  197. }
  198.